// Form submit whidout leave form.
$(document).ready(function() {

	console.log(">> load page finish");

	// Process the form
	$('#myForm').submit(function(event) {

		// stop the standard form submit
		event.preventDefault();
		
		// Obtengo el form	    
		var $form = $(this);
		console.log(">> obtengo del form."+$form);
		        
		// get the form data, transform to json and encode to data parameter.
		var $formData = $('#myForm').serializeJSON();
  	     
		console.log(">> obtengo datos del form. "+JSON.stringify($formData));
		
		// Invoke server
		console.log(">> ivoco por ajax a "+$form.attr("action"));
        $.ajax({
                url: $form.attr('action'),
                type: $form.attr('method'),
                dataType : 'JSON',
                data: $formData,
                
                // Siempre saldria por acá por sucess=true o false.
                success: function(result){
	                console.log(">> invocacion ok, resultado: "+JSON.stringify(result));
	                if (result.sucess == 'true') {
		                $("#alerts").empty().append(result.msg);
                	} else {
	                	$("#alerts").empty().append(result.msg);
                	}
                },
                
                // Solo entraria por acá si hay problema de comunicacion o excepciones no controladas.
                error: function( xhr, status, errorThrown ) {
        			$("#alerts").empty().append("Error uncaught !");
        			console.log(">> invocacion dio error: "+errorThrown+" - Status: "+status);
        			console.dir( xhr );
    			}
    	});

		
	});

});

// Convierte los datos del form en un objeto Json de javascript.
jQuery.fn.serializeJSON=function() {
  var json = {};
  jQuery.map(jQuery(this).serializeArray(), function(n, i) {
    var _ = n.name.indexOf('[');
    if (_ > -1) {
      var o = json;
      _name = n.name.replace(/\]/gi, '').split('[');
      for (var i=0, len=_name.length; i<len; i++) {
        if (i == len-1) {
          if (o[_name[i]]) {
            if (typeof o[_name[i]] == 'string') {
              o[_name[i]] = [o[_name[i]]];
            }
            o[_name[i]].push(n.value);
          }
          else o[_name[i]] = n.value || '';
        }
        else o = o[_name[i]] = o[_name[i]] || {};
      }
    }
    else {
      if (json[n.name] !== undefined) {
        if (!json[n.name].push) {
          json[n.name] = [json[n.name]];
        }
        json[n.name].push(n.value || '');
      }
      else json[n.name] = n.value || '';      
    }
  });
  return json;
};